import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 图片压缩
import viteImagemin from 'vite-plugin-imagemin'
import viteCompression from 'vite-plugin-compression'
import { fileURLToPath, URL } from 'node:url'
// import { autoComplete, Plugin as importToCDN } from "vite-plugin-cdn-import" 
import { visualizer } from 'rollup-plugin-visualizer'

// https://vite.dev/config/
export default defineConfig({
  //配置根路径，解决部署到服务器之后绝对路径会报404问题，所以需改为相对路径（不用nginx时可以这样弄）
  // base: process.env.NODE_ENV === 'production' ? './' : '/',
  //用了nginx就是下面这种
  base:'/',
  plugins: [
    vue(),
    viteCompression({
      filter: /\.(js|css|json|txt|ico|svg)(\?.*)?$/i, // 需要压缩的文件
      threshold: 1024, // 文件容量大于这个值进行压缩
      algorithm: 'gzip', // 压缩方式
      ext: 'gz', // 后缀名
      deleteOriginFile: false, // 压缩后是否删除压缩源文件，false不删除
    }),
    visualizer({
      emitFile: false,
      filename: 'stats.html',
      open: true,
      sourcemap: true
    }),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    // importToCDN({
    //   modules: [
    //     autoComplete('axios'),
    //     autoComplete('vue'),
    //     autoComplete('moment'),
    //     autoComplete('lodash'),
    //     {
    //       name: 'element-plus',
    //       var: 'ElementPlus',
    //       path: 'https://cdn.jsdelivr.net/npm/element-plus@2.9.3/dist/index.full.min.js',
    //       css: 'https://cdn.jsdelivr.net/npm/element-plus@2.9.3/dist/index.css'
    //     },
    //     {
    //       name: 'pinia',
    //       var: 'Pinia',
    //       path: 'https://cdn.jsdelivr.net/npm/pinia@2.3.0/dist/pinia.iife.min.js'
    //     },
    //     {
    //       name: 'echarts',
    //       var: 'echarts',
    //       path: 'https://cdn.jsdelivr.net/npm/echarts@5.6.0/dist/echarts.min.js'
    //     },
    //     {
    //       name: 'vue-router',
    //       var: 'VueRouter',
    //       path: 'https://cdn.jsdelivr.net/npm/vue-router@4.5.0/dist/vue-router.global.min.js'
    //     }
    //   ],
    // }),
    // 图片资源压缩
    viteImagemin({
      gifsicle: {
        optimizationLevel: 7,
        interlaced: false
      },
      optipng: {
        optimizationLevel: 7
      },
      mozjpeg: {
        quality: 20
      },
      pngquant: {
        quality: [0.8, 0.9],
        speed: 4
      },
      svgo: {
        plugins: [
          {
            name: 'removeViewBox'
          },
          {
            name: 'removeEmptyAttrs',
            active: false
          }
        ]
      }
    }),
  ],
  resolve: {
    alias: {
      // '@': path.resolve(__dirname, './src'),
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
    }, 

  },
  define: {
    // 启用生产环境构建下激活不匹配的详细警告
    __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true',
  },
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8088/', // 目标服务器地址
        changeOrigin: true, // 是否改变请求头中的Origin字段
        rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
        ws: true,
      },
    }
  },
  // 生产环境移除console.log的配置
  build: {
    // 默认是esbuild,但这里需要改成terser，并且想使用terser的话，需提前安装，命令为npm add -D                         
    //terser
    minify: "terser",
    terserOptions: {
      compress: {
        //生产环境时移除console
        drop_console: true,
        drop_debugger: true,
      },
    },
  }
})
